package com.code.pattern.observer;

import com.google.common.collect.Lists;

import java.util.List;

/**
 * @author: liyufei
 * @date: 2021-04-03 21:57
 */
public class Sport3DSubject implements Subject {

    // 这个相当于一个跟主题相关的一个事件
    private String msg;

    // 定义一个集合存储观察者对象
    private List<Observer> observers = Lists.newArrayList();

    @Override
    public void registObserver(Observer observer) {
        // 添加观察者
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        // 校验观察者是否在集合中
        int index = observers.indexOf(observer);
        if (index > 0) {
            observers.remove(observer);
        }
    }

    @Override
    public void notifyObserver(String msg) {
        // 遍历观察者，并发送消息
        observers.forEach(observer -> observer.update(msg));
    }

    // 状态变更方法
    public void setMsg(String msg) {
        this.msg = msg;
        // 通知观察者
        notifyObserver(msg);
    }
}
